package beans;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeListenerProxy;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeListener;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import main.EinUndAusgabe;

public class Mitglied implements Serializable, PropertyChangeListener, VetoableChangeListener {
    
    private String name;
    private EinUndAusgabe io = new EinUndAusgabe();
    private ArrayList<String> alte_themen = new ArrayList<>();
    private int propertyChangeCounter = 0;
    private boolean autoEingabe = true;
      
    public Mitglied(EinUndAusgabe io) {
        this.io = io;
    }

    private int intEingeben() {
        int output = io.leseInteger();
        if(autoEingabe)
            System.out.println("[" + output + "]");
        return output;
    }
    
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        Forum f = (Forum) evt.getSource();
        List<String> themen = (ArrayList<String>) evt.getNewValue();
        String neues_thema = themen.get(themen.size()-1);
        System.out.println(name + " erhält in " + f.getTitel() + ":");
        System.out.println(neues_thema);
        propertyChangeCounter++;
    }

    @Override
    public void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException {
        Forum f = (Forum) evt.getSource();
        ArrayList<String> neue_themen = (ArrayList<String>) evt.getNewValue();
        
        /*
         * Neue Themenliste mit alter, bereits akzeptierter Liste vergleichen
         * Wenn unterschiedlich, dann User fragen ob Veto oder nicht
         * sonst automatisch davon ausgehen, dass User einverstanden ist,
         * da "Rück-Veto"
         */
        if(!alte_themen.equals(neue_themen) || neue_themen.size() > 0) {
            String neues_thema = neue_themen.get(neue_themen.size()-1);
            int eingabe;
            System.out.println(name + " Anfrage in Forum "
                    + f.getTitel() + ": " + neues_thema);
            System.out.println("Zustimmen (0) oder Veto (1)");
            eingabe = intEingeben();

            if(eingabe == 1) {
                throw new PropertyVetoException("Beitrag wurde von " 
                        + this.name + " abgelehnt", evt);
            }
            
            //Alte bereits akzeptierte Liste merken
            alte_themen = (ArrayList<String>) evt.getOldValue();
            
        }
    }

    /**
     * @return the propertyChangeCounter
     */
    public int getPropertyChangeCounter() {
        return propertyChangeCounter;
    }

    

}
